Linux 除了直接登入以外,我們也可以透過 ssh 協定來遠端登入,這是進入遠端主機最常見的方式,ssh 本身為加密連線,因此安全性也比較高,CentOS 7 剛安裝完後預設就可以透過 ssh 來登入,只要用我們 root 的密碼或是任一個使用者的密碼(如果沒被鎖權限的話)就可以了。
使用 ssh 指令,後面加上 使用者名稱@主機 IP or HostName
ssh user@192.168.100.100
user@192.168.100.100's password:
Last login: Sun Oct 14 19:41:43 2018 from gateway
[user@localhost ~]$
不過如果是常常需要連入的主機,每次都要打密碼不免有點麻煩,因此除了密碼以外,我們也可以使用金鑰認證來登入,以下是大至上的流程與需要注意的地方:
遠端主機( remote ):192.168.100.100
首先在 local 端主機執行指令來生成一組公鑰與私鑰
ssh-keygen -t rsa
# 執行結果:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/remote1
Enter passphrase (empty for no passphrase):
Your identification has been saved in /home/user/.ssh/remote1.
Your public key has been saved in /home/user/.ssh/remote1.pub.
The key fingerprint is:
SHA256:igDzKqUasd34t667jdfzgkGLofdfg684FyC23ffg53toVs user@ubuntu
The key's randomart image is:
+---[RSA 2048]----+
| .o.o |
| o... . |
|o .... . |
|oo o .. |
|*o+. .=o . |
|*=..+.o-o E |
|o. o.+...+ |
|x=. .o.. |
|=*o..+o. |
+----[SHA256]-----+
ssh-keygen -t rsa 會指定使用 RSA 加密演算法來生成金鑰,金鑰預設名稱為 id_rsa 並且會放在使用者 home 目錄底下的 .ssh 目錄中,如果會有很多組不同的金鑰配對的話,建議在第二步時自訂一個名稱,如本例中的 remote1,但路徑最好還是統一放在 ~/.ssh 裡面比較方便。
Enter passphrase 則是為這組金鑰再額外設定密碼,之後使用金鑰登入的話,就還是要再輸入這組密碼,算是加強防護,但也很麻煩,可視所需的安全性來設定。
輸入完之後,會顯示這組 private key 與 public key 的路徑與 fingerprint,一組新的金鑰就完成了。
做好金鑰後,我們就可開始將金鑰放到 remote 主機上,剛才生成了一組 public key 與一組 private key,原則上 public key 是公開的,把它放在任何想登入的主機中,只要你擁有與它配對的 private key 就可以登入,因此 private 必須妥善的保存不可外流。
將 public key 導入遠端的方法也很簡單,只要使用 ssh-copy-id 這個指令即可
$ ssh-copy-id -i /home/user/.ssh/remote1 user@192.168.100.100
# ssh-copy-id 加上參數 -i 可指定要使用的 public key
# 導入時仍然需要輸入 remote 的登入的密碼
# 執行結果:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user.ssh/remote1.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), tofilter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you areprompted now it is to install the new keys
wade@192.168.122.231's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'user@192.168.100.100'"
and check to make sure that only the key(s) you wanted were added.
測試使用 private key 登入,-i 為指定登入用的私鑰
ssh -i .ssh/remote1 user@192.168.100.100
Last login: Sun Oct 14 21:18:17 2018 from gateway
[user@localhost ~]$
# 這次就直接使用金鑰登入了,不用再輸入密碼
使用 SSH config 快速登入
目前為止我們每次連線都要指定使用者名稱,還要記 ip 與使用的 key,有時候甚至還要使用不同的 port 來連線,有這麼多的東西要記,如果主機一多就更加頭痛,其實 ssh 有提供了一個設定檔讓我們把常用的主機與需要的參數都記下來,並且簡化連線的指令,下面就來介紹一下這個設定檔
首先編輯 ~/.ssh/config 這個檔案,沒有的話可以手動新增
# 檔案的內容格式範例如下
Host myServer
HostName 192.168.100.100
Port 242
IdentityFile ~/.ssh/remote1
User stanley
- Host:自訂連線名稱
- HostName:目標主機的 ip 或 domain name
- Port:使用的 port,沒有的話預設為22
- IdentityFile:使用的金鑰(私鑰)
- User:登入的使用者名稱
本例中我們自訂了 Host 的名稱,這也是我們之後唯一需要記的東西,而且使用的方法也很簡單,只要把 ssh 的指令後面接自訂的 Host 名稱, ex. ssh myServer,這樣就會自動的連入 myServer
ssh myServer
Last login: Sun Oct 14 21:18:17 2018 from gateway
[user@localhost ~]$